---
title: "V5 Status"
hide_table_of_contents: true
wrapperClassName: full-width
---

import styles from "@site/src/css/common.module.css";
import v5betaStyles from "./v5beta.module.css";

import CalloutSection from "@site/src/components/CalloutSection";
import SecondarySection from "@site/src/components/SecondarySection";
import TertiarySection from "@site/src/components/TertiarySection";
import clsx from "clsx";

<div className={v5betaStyles.warningSection}>
<div className={v5betaStyles.warningSectionInner}>

# PostGraphile V5 Status

<div className={v5betaStyles.progressContainerStatusPage}>
  <div className={v5betaStyles.progressBackground}>
    <div className={v5betaStyles.progressForeground} style={{ width: "100%" }}>
      <div className={v5betaStyles.progressLabel}>100%</div>
    </div>
  </div>
</div>

The V5 pre-alpha phase completed after 38 releases.<br />
The V5 alpha phase completed after 20 releases.<br />
The V5 beta phase is completed after 49 releases.<br />
➡️ **<a className={v5betaStyles.progressLink} href="/news/2025-10-28-v5-release-candidate">
Try the PostGraphile V5 release candidate now</a>** ⬅️

</div>
</div>

<div className={v5betaStyles.prose}>

## About PostGraphile V5

**Production-ready** and already powering many apps, V5 is a complete ground-up
rewrite powered by [Gra*fast*](https://grafast.org), our cutting-edge planning
and execution engine for GraphQL. It dramatically reduces Postgres load,
supports true polymorphism, and introduces incremental delivery, executable
schema exports, greater control over your schema, and much more. Its efficient
and ergonomic extensibility guides you into the pit of success. It even
introduces an “eject button” for when you feel the need to move beyond an
autogenerated schema!

V5 remains in “release candidate” during final user testing, so minor adjustments may
be needed between updates. Postgres-centric users who leverage [trusted
documents](https://benjie.dev/graphql/trusted-documents) (highly recommended!)
should experience particularly smooth sailing!

- [**Overview of new features**](/postgraphile/5/migrating-from-v4/v5-new-feature-summary)
- [Intro to V5 series](https://dev.to/benjie/series/23459) on dev.to
- [V5 Documentation](/postgraphile/5)
- [V4 &rarr; V5 migration guide](/postgraphile/5/migrating-from-v4)

## Current Status

Now that all four epics are complete, the release candidate is available and
waiting for your sign-off. The runtime is ready, but the documentation and
TypeScript types still need polish. This is the final opportunity to try
PostGraphile V5 before the stable release and tell us what needs to be clearer
or smoother.

## How to help

To help us shape the final release, you can:

- Try the release candidate on your real use cases and report back
  - Ship it in production, or run it on a staging branch
  - Send feedback &mdash; **good &amp; bad** &mdash; through [GitHub](https://github.com/graphile/crystal)
    or [Discord](https://discord.gg/graphile)
  - Use [benjie/ouch-my-finger](https://github.com/benjie/ouch-my-finger) to
    generate minimal reproductions
- Help address issues in the [V5 Project Board](https://github.com/orgs/graphile/projects/3)
- Contribute to documentation, examples, and missing TypeScript annotations
- [Sponsor us](/sponsor) &mdash; **you rely on our software, we rely on your financial support**

## Try the release candidate today

Install the release candidate from npm, be sure to use the `@rc` tag for all
related modules:

```bash
yarn add postgraphile@rc
```

You can also try the bundled CLI without installing:

```bash
npx pgl -P pgl/amber -e -c postgres:///my_db -s public
```

Replace the connection string and schema with your own values. If you are
upgrading from V4, follow the [migration guide](/postgraphile/5/migrating-from-v4)
and let us know where it can be improved.

</div>

<CalloutSection
  title={`Crowd-funded open-source software`}
  body={`Sponsoring the Graphile project directly increases the time and resources we can spend on polishing the PostGraphile V5 release candidate. THANK YOU to all our sponsors!`}
  link={`/sponsor/`}
  buttonText={`Learn more about sponsorship`}
/>

<div className={v5betaStyles.prose}>

## Epics - COMPLETE!

With the help of the community, we identified four major issues in our new
planning engine, Gra*fast*. These issues related to ergonomics, edge cases, or
efficiency; they all required changes to user code (“plan resolvers”), so
addressing them before release was vital.

Since fixing these issues required fundamental changes to the way the system
works &mdash; re-architectures that took many months to complete &mdash; we
called them “epics”. All four are now complete, hurrah!

- ✅ Everything is batched, but “unary” values (variables, context, etc) are now treated as a special case.
- ✅ Early termination of field execution with a `null` now has first-class
  support.
- ✅ Plan-time “peeking” at runtime values is now forbidden, improving plan
  re-use (aka [remove `$step.eval*()`](https://github.com/graphile/crystal/issues/2060)).
- ✅ The exponential polymorphic branching hazard is now eradicated by
  converging before branching again (achieved June 2025).

## Milestone releases

Some of the more notable recent releases are listed below. [Graphile sponsors](/sponsor) have access to release notes through our community support channels.
Everyone else can see some detail in the PostGraphile [changelog](https://github.com/graphile/crystal/blob/main/postgraphile/postgraphile/CHANGELOG.md).

</div>

{

<table className={v5betaStyles.releasesTable}>

<thead>

<tr>
  <th>Date</th>
  <th>Release</th>
  <th>Details</th>
</tr>

</thead>

<tbody>

<tr>
  <td>2025-10-28</td>
  <td>rc.1</td>
  <td>
    Release candidate ready (
    <a href="/news/2025-10-28-v5-release-candidate">
      read more
    </a>
    )
  </td>
</tr>

<tr>
  <td>2025-09-24</td>
  <td>beta.49</td>
  <td>Final beta release</td>
</tr>

<tr>
  <td>2025-06-06</td>
  <td>beta.41</td>
  <td>
    Polymorphism epic achieved (
    <a href="https://www.graphile.org/news/20250607-last-epic-solved/">
      read more
    </a>
    )
  </td>
</tr>

<tr>
  <td>2025-03-25</td>
  <td>beta.40</td>
  <td>
    Removing <code>$step.eval*()</code> epic achieved (
    <a href="https://www.graphile.org/news/20250324-major-grafast-beta/">
      read more
    </a>
    )
  </td>
</tr>

<tr>
  <td>2024-12-11</td>
  <td>beta.36</td>
  <td>Introduce safe step caching methods</td>
</tr>

<tr>
  <td>2024-10-07</td>
  <td>beta.30</td>
  <td>Behavior system overhaul</td>
</tr>

<tr>
  <td>2024-07-17</td>
  <td>beta.27</td>
  <td>Error handling overhaul</td>
</tr>

<tr>
  <td>2024-05-09</td>
  <td>beta.22</td>
  <td>Early exit and global dependencies epics achieved</td>
</tr>

<tr>
  <td>2023-08-03</td>
  <td>beta.1</td>
  <td>
    Version 5 beta public release (
    <a href="./news/2023-08-03-version-5-beta">read more</a>)
  </td>
</tr>

<tr>
  <td>2023-04-26</td>
  <td>alpha.1</td>
  <td>First alpha release (sponsors only)</td>
</tr>

<tr>
  <td>2023-01-11</td>
  <td>0.3</td>
  <td>First pre-alpha release (sponsors only)</td>
</tr>

</tbody>

</table>

}

<SecondarySection
  title={`Development Support`}
  tagline={`Priority text support straight from the maintainer`}
  body={`Give your company access to the knowledge and experience of the Graphile team through your chat server and GitHub/GitLab organization. Reference your code verbatim and arrange calls for any trickier topics.`}
  Svg={require("@site/static/img/homepage/support.svg").default}
  link={`https://www.graphile.org/support/`}
  buttonText={`Learn more`}
/>
